home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Aminet 4
/
Aminet 4 - November 1994.iso
/
aminet
/
comm
/
net
/
spakparnet_0_5.lha
/
srv
/
nfsfreelock.c
< prev
next >
Wrap
C/C++ Source or Header
|
1992-11-09
|
3KB
|
89 lines
/********************************************************************
** NETWORK FILE SYSTEM SERVICE
**
** (c) Spak, Darrell Tam, c9107253@ee.newcastle.edu.au (1994)
** phone (Australia) 049-829-710
** 49-829-710
** (c) SST Jan-Feb-Mar 1994
**
** "FREELOCK" file support
**
** TABS to 4
********************************************************************/
#include "/snd/everything.h"
#include <st/st_proto.h>
#include "nfsinternal.h"
#include "nfsglobs_protos.h"
struct FreeLockDosMsg {
struct DosMsg dm;
struct NFSStdReturn freelockret; /* net-send this back */
struct PktMsgRecv *pmr;
struct InternalLock *il;
};
#define FREELOCKMSG_SIZE sizeof(struct FreeLockDosMsg)
/********************************************************************/
static void free_retret_freelock(struct PktMsgRecv *pmr)
/********************************************************************/
{
struct FreeLockDosMsg *fldm = (void *)pmr->user.user2;
struct InternalLock *il = fldm->il;
#ifdef DEBUG
fpf(out, "nfs_freelock: Freeing memory\n");
#endif
REMOVE_FROM_LIST(il, il_first);
FreeMem(il, IL_SIZE);
FreeMem(fldm, FREELOCKMSG_SIZE); /* dos msg */
FREE_PKTMSGRECV(pmr); /* server msg */
}
/********************************************************************/
static void handle_freelock(struct FreeLockDosMsg *fldm)
/********************************************************************/
{
struct PktMsgRecv *pmr = fldm->pmr;
fldm->freelockret.remote_res1 = fldm->dm.sp.sp_Pkt.dp_Res1;
fldm->freelockret.remote_res2 = fldm->dm.sp.sp_Pkt.dp_Res2;
PUT_STDMSG(&pmr->pm.smsg, pmr->dmaport, TYPE_INTERNAL_SEND);
#ifdef DEBUG
fpf(out, "nfs_freelock: return going home\n");
#endif
}
/********************************************************************/
void *srv_freelock(struct PktMsgRecv *pmr)
/********************************************************************/
{
struct NFSFreeLock *req = (void *)pmr->req_body;
struct InternalLock *il = GET_INTERNALLOCK(req->remote_il, req->remote_majic);
struct FreeLockDosMsg *fldm;
if(!il) return(&nfs_res_ok); /* filehandle doesn't exist! */
ACT_ALLOCMSG_THINGY(fldm, FREELOCKMSG_SIZE); /* get dosmsgpkt+return memory */
#ifdef DEBUG
fpf(out, "nfs_freelock: lock=%lx, port=%lx\n", il, il->reallock->fl_Task);
#endif
fldm->pmr = pmr;
fldm->il = il;
ACT_INIT_RETURN_PMR(pmr, free_retret_freelock, fldm, &fldm->freelockret, req);
INIT_DOS_MSG(&fldm->dm, dosport, handle_freelock);
fldm->dm.sp.sp_Pkt.dp_Type = ACTION_FREE_LOCK;
fldm->dm.sp.sp_Pkt.dp_Arg1 = CTOB(il->reallock);
PutMsg(il->reallock->fl_Task, fldm);
return(NULL);
}